Problem s dekodovanim byte-u s LSB po prijmu z Com portu

Otázka od: Ing. Jiri Sokol

10. 9. 2004 12:38

Ahoj!
Dostal se mi do ruky zarizeni, ktere ma cist bezkontaktni cipove karty. Vse
funguje, se zarizenim komunikuju, akorat nejsem schopen spravne dekodovat
prijate cislo karty.
V popisu zarizeni je, ze se komunikuje jen na 5-ti bitech. Po obdrzeni znaku,
ktery ma prvnich 5 bitu = 1 znamena, ze mi zarizeni posle dalsich 10 znaku, coz
ma byt cislo toho cipu (karty). V tech 10-ti znacich maji byt 4 bity cislo a
5.bit ma oznacovat sudou paritu (LSB).
No a jsem druhej. Vubec nevim jak to mam dekodovat, abych se dopatral spravneho
vysledku.
Muzete mi s tim, prosim, pomoct?

Prijde mi:

mel dekodoval snad to co jsem
bych jsem ta dostal
dostat suda pari. v bin v dec

1 3 ne 11000 3
9 2 ANO 01001 18
0 0 ne 00000 0
1 3 ne 11000 3
2 5 ne 10100 5
9 2 ANO 01001 18
3 6 ne 01100 6
B 7 ANO 11101 23
4 9 ne 10010 9
3 6 ne 01100 6

vyslo mi:
3203526796

mel bych dostat:
1901293B43

Tak ja fakt nevim.
Diky za nakopnuti.
Jirka
--------------------------------------------------
Ing. Jiri Sokol; jiri.sokol@seznam.cz; 972 231 187
D6Prof+SP3; WinXPProf+SP1; FB 1.5.0
programator amater

Odpovedá: Martin Pisarik

10. 9. 2004 13:26

Kdyz jsem si cetl to cos dostal odzadu (zprava doleva) 4 bity, tak to dava
to co bys chtel dostat...


-----Original Message-----
From: delphi-l-owner@clexpert.cz [mailto:delphi-l-owner@clexpert.cz]On
Behalf Of Ing. Jiri Sokol
Sent: Friday, September 10, 2004 1:08 PM
To: delphi-l@clexpert.cz
Subject: Problem s dekodovanim byte-u s LSB po prijmu z Com portu


Ahoj!
Dostal se mi do ruky zarizeni, ktere ma cist bezkontaktni cipove karty. Vse
funguje, se zarizenim komunikuju, akorat nejsem schopen spravne dekodovat
prijate cislo karty.
V popisu zarizeni je, ze se komunikuje jen na 5-ti bitech. Po obdrzeni
znaku, ktery ma prvnich 5 bitu = 1 znamena, ze mi zarizeni posle dalsich 10
znaku, coz ma byt cislo toho cipu (karty). V tech 10-ti znacich maji byt 4
bity cislo a 5.bit ma oznacovat sudou paritu (LSB).
No a jsem druhej. Vubec nevim jak to mam dekodovat, abych se dopatral
spravneho vysledku.
Muzete mi s tim, prosim, pomoct?

Prijde mi:

mel dekodoval snad to co jsem
bych jsem ta dostal
dostat suda pari. v bin v dec

1 3 ne 11000 3
9 2 ANO 01001 18
0 0 ne 00000 0
1 3 ne 11000 3
2 5 ne 10100 5
9 2 ANO 01001 18
3 6 ne 01100 6
B 7 ANO 11101 23
4 9 ne 10010 9
3 6 ne 01100 6

vyslo mi:
3203526796

mel bych dostat:
1901293B43

Tak ja fakt nevim.
Diky za nakopnuti.
Jirka
--------------------------------------------------
Ing. Jiri Sokol; jiri.sokol@seznam.cz; 972 231 187
D6Prof+SP3; WinXPProf+SP1; FB 1.5.0
programator amater



Odpovedá: Ing. Jiri Sokol

10. 9. 2004 13:16

> Od: Martin Pisarik <martin.pisarik@seznam.cz>
> Datum: 10.09.2004 13:58:39
>
> Kdyz jsem si cetl to cos dostal odzadu (zprava doleva) 4 bity, tak to dava
> to co bys chtel dostat...
>

Ahoj.
To uz me taky napadlo, ale nesedi to...

     Prislo
v bin v dec kdyz posl. Mam
         bit je 1. dostat

11000 3 8 1
01001 18 9 9
00000 0 0 0
11000 3 8 1
10100 5 4 2
01001 18 9 9
01100 6 12 (C) 3
11101 23 13 (D) B
10010 9 2 4
01100 6 12 (C) 3

Jak jsi na to prisel? Treba to akorat nevidim.... Hacek bude v tom, ze nevim co
s tou sudou paritou... Kdyby mi tohle nekdo vysvetlil, tak to by zrejme pak
mohlo vysvetlit to, ze dostavam neco jineho....
Jirka
--------------------------------------------------
Ing. Jiri Sokol; jiri.sokol@seznam.cz; 972 231 187
D6Prof+SP3; WinXPProf+SP1; FB 1.5.0
programator amater

Odpovedá: Erik Salaj, Winsoft

10. 9. 2004 13:44

> 1 3 ne 11000 3
> 9 2 ANO 01001 18
> 0 0 ne 00000 0
> 1 3 ne 11000 3
> 2 5 ne 10100 5
> 9 2 ANO 01001 18
> 3 6 ne 01100 6
> B 7 ANO 11101 23
> 4 9 ne 10010 9
> 3 6 ne 01100 6

z binarnych udajov sa zda, ze prvy bit zlava je paritny,
nasledujuce 4 bity su datove:

11000: Parita = 1, Data = 1 + 0 + 0 + 0 = 1
01001: Parita = 0, Data = 1 + 0 + 0 + 8 = 9
00000: Parita = 0, Data = 0 + 0 + 0 + 0 = 0
etc.

Erik


Odpovedá: Jiri Foldyna

10. 9. 2004 13:42

> > Kdyz jsem si cetl to cos dostal odzadu (zprava doleva) 4
> bity, tak to dava
> > to co bys chtel dostat...
> >
>
> Ahoj.
> To uz me taky napadlo, ale nesedi to...
>
> Prislo
> v bin v dec kdyz posl. Mam
> bit je 1. dostat
>
> 11000 3 8 1
> 01001 18 9 9
> 00000 0 0 0
> 11000 3 8 1
> 10100 5 4 2
> 01001 18 9 9
> 01100 6 12 (C) 3
> 11101 23 13 (D) B
> 10010 9 2 4
> 01100 6 12 (C) 3
>
> Jak jsi na to prisel? Treba to akorat nevidim.... Hacek bude
> v tom, ze nevim co s tou sudou paritou... Kdyby mi tohle
> nekdo vysvetlil, tak to by zrejme pak mohlo vysvetlit to, ze
> dostavam neco jineho....

Podle vzorku je 0. bit paritni (doplnuje pocet jednicek ve slovu na sude
cislo, jiny vyznam nema). Bity 1 az 4 jsou datove, v reverznim poradi.
Dekodoval bych to asi takto (za predpokladu, ze vyznamnych je pet bitu
zprava, bez kontroly parity):

function Decode(Value:integer) : integer;
begin
  Result :=
    ((Value and 1) shl 3) or
    ((Value and 2) shl 1) or
    ((Value and 4) shr 1) or
    ((Value and 8) shr 3);
end;

Zdravim

JIri Foldyna


Odpovedá: Jiri Foldyna

10. 9. 2004 13:52

> Podle vzorku je 0. bit paritni (doplnuje pocet jednicek ve
> slovu na sude
> cislo, jiny vyznam nema). Bity 1 az 4 jsou datove, v reverznim poradi.
> Dekodoval bych to asi takto (za predpokladu, ze vyznamnych je pet bitu
> zprava, bez kontroly parity):

Eh, ruka rychlejsi nez hlava, paritni je samozrejme 4.bit, bity 0 az 3 jsou
datove v reverznim poradi. Dekodovaci funkce je ovsem (snad  spravne.

Zdravim

Jiri Foldyna